package com.xwdeshj.utils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @date 2016-4-26
 * @author tzy
 * @class 日期操作类
 */
public class DateUtil {
	/**
	 * Unix时间戳,长度10
	 * @return
	 */
	public static String getTimestamp(){
		return String.valueOf(new Date().getTime() / 1000);
	}
	
	/**
	 * 当前时间 格式：201605121404
	 */
	public static String getNowTimeStr() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
		return sdf.format(new Date());
	}
	/**
	 * 当前时间 格式：201605121404
	 */
	public static String getNowTimeStr_() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		return sdf.format(new Date());
	}
	/**
	 * 当前时间 格式：20160512140411
	 */
	public static String getNowTimeStr2() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
		return sdf.format(new Date());
	}
	/**
	 * 当前时间 格式：20160512140411
	 */
	public static String getNowTimeStr3() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
		return sdf.format(new Date());
	}
	/**
	 * 当前时间
	 */
	public static int getNowTime() {
		return (int) (new Date().getTime() / 1000);
	}
	/**
	 * 根据秒获取时：分：秒
	 * @param totalRemainder1 秒
	 * @return
	 */
    public static String gettimebyseconds(int totalRemainder1)
    {
        int hour1 = totalRemainder1 / 3600;
        int minute1 = totalRemainder1 % 3600 / 60;
        int second1 = totalRemainder1 % 60;
        String remainder1 =hour1 + "时" + minute1 + "分" + second1+"秒";
        //String remainder1 =hour1 + "时" + minute1 + "分";

        
        return remainder1;
        }
    /**
     * 截取当前时间时分
     * @param strDate
     * @return
     */
    public static String gethhmm(String strDate){
        return strDate.substring(11,16);
    }
    /**
	 * 根据秒获取时
	 * @param totalRemainder1 秒
	 * @return
	 */
    public static String gettimehours(int totalRemainder1)
    {
        int hour1 = totalRemainder1 / 3600;
        String remainder1 =hour1+"";
        return remainder1;
        }
    /**
     * 获取小时
     * @param s
     * @return
     */
    public static int gethour(int s)
    {
        int hour = s / 3600;
        return hour;
    }
    public static String getcurrentdate(){
    	SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    	return sdf.format(new Date());
    }
    /**
     * 获取年月日
     * @return
     */
    public static String getendtime(String str){
    	SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
    	return sdf.format(str);
    }
    
    /**
    * 字符串转换到时间格式
    * @param dateStr 需要转换的字符串
    * @param formatStr 需要格式的目标字符串 举例 yyyy-MM-dd
    * @return Date 返回转换后的时间
    * @throws ParseException 转换异常
    */
    public static Date StringToDate(String dateStr, String formatStr){
	    DateFormat sdf=new SimpleDateFormat(formatStr);
	    Date date=null;
	    try {
	        date = sdf.parse(dateStr);
	    } catch (ParseException e) {
	          e.printStackTrace();
	    }
	    return date;
    }
    /** 
     * 判断时间是否在时间段内 
     *  
     * @param date 
     *            当前时间 yyyy-MM-dd HH:mm:ss 
     * @param strDateBegin 
     *            开始时间 00:00:00 
     * @param strDateEnd 
     *            结束时间 00:05:00 
     * @return 
     */  
    public static boolean isInDate(Date date, String strDateBegin,
                                   String strDateEnd) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String strDate = sdf.format(date);
        // 截取当前时间时分秒  
        int strDateH = Integer.parseInt(strDate.substring(11, 13));
        int strDateM = Integer.parseInt(strDate.substring(14, 16));
        int strDateS = Integer.parseInt(strDate.substring(17, 19));
        // 截取开始时间时分秒  
        int strDateBeginH = Integer.parseInt(strDateBegin.substring(0, 2));
        int strDateBeginM = Integer.parseInt(strDateBegin.substring(3, 5));
        int strDateBeginS = Integer.parseInt(strDateBegin.substring(6, 8));
        // 截取结束时间时分秒  
        int strDateEndH = Integer.parseInt(strDateEnd.substring(0, 2));
        int strDateEndM = Integer.parseInt(strDateEnd.substring(3, 5));
        int strDateEndS = Integer.parseInt(strDateEnd.substring(6, 8));
        if ((strDateH >= strDateBeginH && strDateH <= strDateEndH)) {  
            // 当前时间小时数在开始时间和结束时间小时数之间  
            if (strDateH > strDateBeginH && strDateH < strDateEndH) {  
                return true;  
                // 当前时间小时数等于开始时间小时数，分钟数在开始和结束之间  
            } else if (strDateH == strDateBeginH && strDateM >= strDateBeginM  
                    && strDateM <= strDateEndM) {  
                return true;  
                // 当前时间小时数等于开始时间小时数，分钟数等于开始时间分钟数，秒数在开始和结束之间  
            } else if (strDateH == strDateBeginH && strDateM == strDateBeginM  
                    && strDateS >= strDateBeginS && strDateS <= strDateEndS) {  
                return true;  
            }  
            // 当前时间小时数大等于开始时间小时数，等于结束时间小时数，分钟数小等于结束时间分钟数  
            else if (strDateH >= strDateBeginH && strDateH == strDateEndH  
                    && strDateM <= strDateEndM) {  
                return true;  
                // 当前时间小时数大等于开始时间小时数，等于结束时间小时数，分钟数等于结束时间分钟数，秒数小等于结束时间秒数  
            } else if (strDateH >= strDateBeginH && strDateH == strDateEndH  
                    && strDateM == strDateEndM && strDateS <= strDateEndS) {  
                return true;  
            } else {  
                return false;  
            }  
        } else {  
            return false;  
        }  
    }  
    /** 
     * 根据日期获得所在周的日期  
     * @param mdate 
     * @return 
     */  
    @SuppressWarnings("deprecation")
	public static List<Date> dateToWeek(Date mdate) {
        int b = mdate.getDay();  
        Date fdate;
        List<Date> list = new ArrayList<Date>();
        Long fTime = mdate.getTime() - b * 24 * 3600000;
        for (int a = 1; a <= 7; a++) {  
            fdate = new Date();
            fdate.setTime(fTime + (a * 24 * 3600000));  
            list.add(a-1, fdate);  
        }  
        return list;  
    }
    /** 
     * 根据日期的后一天  
     * @param mdate 
     * @return 
     */ 
	public static String getnextdate(Date date, int day) {
    	 Calendar c = Calendar.getInstance();
         c.setTime(date);  
         c.add(Calendar.DAY_OF_MONTH, day);// 今天+1天
         Date tomorrow = c.getTime();
         SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
         String tomorrow_str=sdf.format(tomorrow);
         return tomorrow_str;
    }


    /**
     * 给时间加上几个小时
     * @param day 当前时间 格式：yyyy-MM-dd HH:mm:ss
     * @param hour 需要加的时间
     * @return
     */
    public static String addDateMinut(String day, int hour){
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = null;
        try {
            date = format.parse(day);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        if (date == null)
            return "";
        System.out.println("front:" + format.format(date)); //显示输入的日期
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.HOUR, hour);// 24小时制
        date = cal.getTime();
        System.out.println("after:" + format.format(date));  //显示更新后的日期
        cal = null;
        return format.format(date);

    }


    /**
     * 日期型转为字符型
     * @param date
     * @return
     */
    public static String DateToString(Date date){
//        System.out.println(date);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format = sdf.format(date);
//        System.out.println(format);
        return format;
    }


    public static void main(String[] args){
        Date now=new Date();
        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String day = f.format(now);
        addDateMinut(day,2);
    }
}
